﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Xml.Linq;
using Biblioteca.Utils;
using System.Data.Common;
using Biblioteca.DataBase;
using Pms.Utils;
using SERIX.Util;

namespace SERIX
{

    public class CriteriosPesquisaCateg : CriteriosPesquisa
    {
        public string FiltroTipoQuest { get; set; }
        public string DscFiltroTipoQuest { get; set; }
        public string MestreTipoQuest { get; set; }
    }

    public partial class CategoriasQuestionarios : Seguranca
    {
        string _idt_tiq = "";
        string _filtro = "";
        bool _liberar_ordenacao = false;

        CriteriosPesquisaCateg criteriosPesquisa;

        private void lovSelecao(string chave, string descricao)
        {
            tbTipoQuestionario.Text = descricao;
            tbTipoQuestionario.Attributes.Add("chave", chave);
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            base.OnLoad(e);
            btnNovo.Enabled = PermissaoManut.Equals(Constantes.PERM_MANUTENCAO);
            lovTipoQuestionario.Selecao += new SERIX.Controles.lovGenerica.SelecaoDelegate(lovSelecao);
            lovTipoQuestionario.ConfigurarLov("Serix", "srx_tipos_questionarios", "IDT_TIQ", "DSC_TIQ", "DSC_TIQ", "Pesquisa de Tipos de Fichas Cadastrais", "Descrição");
            InicializarCriteriosPesquisa();
            //Mestre
            if (Request["idt_tiq"] != null)
            {
                _idt_tiq = Server.UrlDecode(Criptografia.Descriptografar(Request["idt_tiq"]));
                _filtro = "&idt_tiq_mestre=" + Server.UrlEncode(Request["idt_tiq"]);
            }
            else if (criteriosPesquisa != null && !string.IsNullOrEmpty(criteriosPesquisa.MestreTipoQuest))
            {
                _idt_tiq = criteriosPesquisa.MestreTipoQuest;
                _filtro = "&idt_tiq_mestre=" + Server.UrlEncode(Criptografia.Criptografar(_idt_tiq));
            }

            if (!RestaurarPesquisa() && !Page.IsPostBack)
            {
                SalvarPesquisa();
                Navegador1.CarregueBotoes(0);
                Pesquisar();
            }
            else if (!string.IsNullOrEmpty(_idt_tiq))
            {
                SalvarPesquisa();
            }
            Navegador1.Pesquisar += new SERIX.Controles.Navegador.PesquisarDelegate(Pesquisar);
            txtFiltrar.Focus();
        }

        private void InicializarCriteriosPesquisa()
        {
            criteriosPesquisa = (CriteriosPesquisaCateg)Session[Page.ToString()];
        }

        private void SalvarPesquisa()
        {
            string filtroTipoQuest = "";
            if (!string.IsNullOrEmpty(tbTipoQuestionario.Attributes["chave"]))
            {
                filtroTipoQuest = tbTipoQuestionario.Attributes["chave"];
            }
            if (criteriosPesquisa == null)
            {
                criteriosPesquisa = new CriteriosPesquisaCateg() { FiltroSimples = txtFiltrar.Text, PaginaAtual = 1, FiltroTipoQuest = filtroTipoQuest, DscFiltroTipoQuest = tbTipoQuestionario.Text, MestreTipoQuest = _idt_tiq };
                Session[Page.ToString()] = criteriosPesquisa;
            }
            else
            {
                criteriosPesquisa.FiltroSimples = txtFiltrar.Text;
                criteriosPesquisa.FiltroTipoQuest = filtroTipoQuest;
                criteriosPesquisa.DscFiltroTipoQuest = tbTipoQuestionario.Text;
                criteriosPesquisa.MestreTipoQuest = _idt_tiq;
            }
        }

        private bool RestaurarPesquisa()
        {
            if (!IsPostBack && criteriosPesquisa != null)
            {
                txtFiltrar.Text = criteriosPesquisa.FiltroSimples;
                if (!string.IsNullOrEmpty(criteriosPesquisa.FiltroTipoQuest))
                {
                    tbTipoQuestionario.Text = criteriosPesquisa.DscFiltroTipoQuest;
                    tbTipoQuestionario.Attributes.Add("chave", criteriosPesquisa.FiltroTipoQuest);
                }
                if (string.IsNullOrEmpty(_idt_tiq))
                {
                    _idt_tiq = criteriosPesquisa.MestreTipoQuest;
                    _filtro = "&idt_tiq=" + Server.UrlEncode(Criptografia.Criptografar(criteriosPesquisa.MestreTipoQuest));
                }
                else if (!string.IsNullOrEmpty(criteriosPesquisa.MestreTipoQuest) && _idt_tiq != criteriosPesquisa.MestreTipoQuest)
                {
                    criteriosPesquisa.PaginaAtual = 1;
                    criteriosPesquisa.FiltroSimples = "";
                    criteriosPesquisa.FiltroTipoQuest = "";
                }
                Pesquisar();
                return true;
            }
            return false;
        }

        /// <summary>
        /// Método que trata o recebimento do parametro do mestre
        /// </summary>
        /// <returns></returns>
        private string MestreDetalhe(string tag)
        {
            string filtro = "";
            if (!String.IsNullOrEmpty(_idt_tiq))
            {
                filtro = " " + tag + " idt_tiq = " + _idt_tiq;
                tdMestre.Visible = true;
                CTiposQuestionarios mestre = CTiposQuestionarios.PesquisaporCodigo(_idt_tiq, UsuAut.Login);
                lbMestre.Text = "Tipo de Ficha Cadastral: " + mestre.Dsc_tiq;
                lbTipoQuestionario.Visible = false;
                tbTipoQuestionario.Visible = false;
                lovTipoQuestionario.Visible = false;
                _liberar_ordenacao = true;
            }
            else
            {
                tdMestre.Visible = false;
            };
            return filtro;
        }

        protected void Todos()
        {
            txtFiltrar.Text = "";
            tbTipoQuestionario.Text = "";

            lblFiltro.Text = "Filtro:";
            string filtro = "";
            filtro = MestreDetalhe("where");
            string SQL = @" select idt_tiq, idt_cat, dsc_cat, ordem from Serix.SRX_CATEGORIAS_QUESTIONARIOS  " + filtro + " order by ORDEM ";
            QueryPaginada qy = null;
            try
            {
                qy = new QueryPaginada(BiblioPMS.ObterConexao(BiblioPMS.aplicacaoSNG, UsuAut.Login, BiblioPMS.Demo), SQL, BiblioSERIX.tamPag);
                gridView.DataSource = qy.Executar(criteriosPesquisa.PaginaAtual);
                gridView.DataBind();
                Navegador1.CarregueBotoes(qy.QtdLinhas());
            }
            catch
            {
                if (qy.EstadoConexao() == ConnectionState.Open)
                    qy.FecharConexao();
            }
            finally
            {
                if (qy.EstadoConexao() == ConnectionState.Open)
                    qy.FecharConexao();
            }
        }

        protected void Pesquisar()
        {

            QueryPaginada qy = null;
            try
            {
                //Se o filtro nao estiver vazio 
                if (!String.IsNullOrEmpty(txtFiltrar.Text) || !String.IsNullOrEmpty(_idt_tiq) || !String.IsNullOrEmpty(tbTipoQuestionario.Text))
                {
                    string filtro = "";
                    string dsc_filtro = "";
                    filtro = MestreDetalhe("and");

                    if (!String.IsNullOrEmpty(txtFiltrar.Text))
                    {
                        dsc_filtro = " Descrição = \"" + txtFiltrar.Text + "\"";
                        filtro = filtro + " and UPPER(T.DSC_CAT) LIKE '%' || UPPER(:DSC_CAT) || '%' ";
                    }

                    if (!String.IsNullOrEmpty(tbTipoQuestionario.Text))
                    {
                        dsc_filtro = dsc_filtro + " Tipo de Ficha Cadastral = \"" + tbTipoQuestionario.Text + "\"";
                        filtro = filtro + " and idt_tiq = :idt_tiq ";
                        _liberar_ordenacao = true;
                    }

                    lblFiltro.Text = "Filtro:" + dsc_filtro;

                    string SQL = @" SELECT idt_tiq, idt_cat, dsc_cat, ordem 
                                      FROM Serix.SRX_CATEGORIAS_QUESTIONARIOS  T 
                                      WHERE 1=1 " +
                                      filtro + " order by ORDEM";
                    try
                    {
                        qy = new QueryPaginada(BiblioPMS.ObterConexao(BiblioPMS.aplicacaoSNG, UsuAut.Login, BiblioPMS.Demo), SQL, BiblioSERIX.tamPag);
                        if (!String.IsNullOrEmpty(txtFiltrar.Text))
                        {
                            qy.AdicionarParametro("DSC_CAT", DbType.String, txtFiltrar.Text);
                        }

                        if (!String.IsNullOrEmpty(tbTipoQuestionario.Text))
                        {
                            qy.AdicionarParametro("idt_tiq", DbType.String, tbTipoQuestionario.Attributes["chave"]);
                        }
                        gridView.DataSource = qy.Executar(criteriosPesquisa.PaginaAtual);
                        gridView.DataBind();
                        Navegador1.CarregueBotoes(qy.QtdLinhas());
                    }
                    catch
                    {
                        if (qy.EstadoConexao() == ConnectionState.Open)
                            qy.FecharConexao();
                        Todos();
                    }
                    finally
                    {
                        if (qy.EstadoConexao() == ConnectionState.Open)
                            qy.FecharConexao();
                    }
                }
                else
                    //Caso o filtro esteja vazio, mostre todos
                    Todos();
            }
            catch
            //Em caso de erro, mostra todos as unidades
            {
                if (qy.EstadoConexao() == ConnectionState.Open)
                    qy.FecharConexao();
                Todos();
            }
        }

        protected void btnNovo_Click(object sender, EventArgs e)
        {
            Response.Redirect("CategoriasQuestionariosManut.aspx?OP=I" + _filtro);
        }

        protected void btnPequisar_Click(object sender, EventArgs e)
        {
            criteriosPesquisa.PaginaAtual = 1;
            Pesquisar();
            SalvarPesquisa();
        }

        protected void btnTodos_Click(object sender, EventArgs e)
        {
            criteriosPesquisa.PaginaAtual = 1;
            Todos();
            SalvarPesquisa();
        }

        protected void gridView_RowDataBound(object sender, GridViewRowEventArgs e)
        {

            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                string IDT_TIQ = ((DbDataRecord)e.Row.DataItem)["IDT_TIQ"].ToString();
                string IDT_CAT = ((DbDataRecord)e.Row.DataItem)["IDT_CAT"].ToString();
                ((ImageButton)e.Row.Cells[gridView.Columns.Count - 5].Controls[1]).CommandArgument = IDT_TIQ + ';' + IDT_CAT + ";S";
                ((ImageButton)e.Row.Cells[gridView.Columns.Count - 5].Controls[3]).CommandArgument = IDT_TIQ + ';' + IDT_CAT + ";DATANASC_CONJUGE";
                ((HyperLink)e.Row.Cells[gridView.Columns.Count - 4].Controls[1]).NavigateUrl = "CategoriasQuestionariosManut.aspx?OP=R&idt_tiq=" + Server.UrlEncode(Criptografia.Criptografar(IDT_TIQ)) + "&idt_cat=" + Server.UrlEncode(Criptografia.Criptografar(IDT_CAT)) + _filtro;
                ((HyperLink)e.Row.Cells[gridView.Columns.Count - 3].Controls[1]).NavigateUrl = "CategoriasQuestionariosManut.aspx?OP=U&idt_tiq=" + Server.UrlEncode(Criptografia.Criptografar(IDT_TIQ)) + "&idt_cat=" + Server.UrlEncode(Criptografia.Criptografar(IDT_CAT)) + _filtro;
                ((HyperLink)e.Row.Cells[gridView.Columns.Count - 2].Controls[1]).NavigateUrl = "CategoriasQuestionariosManut.aspx?OP=DATANASC_CONJUGE&idt_tiq=" + Server.UrlEncode(Criptografia.Criptografar(IDT_TIQ)) + "&idt_cat=" + Server.UrlEncode(Criptografia.Criptografar(IDT_CAT)) + _filtro;
                ((DropDownList)e.Row.Cells[gridView.Columns.Count - 1].Controls[1]).Attributes.Add("chave_tiq", Server.UrlEncode(Criptografia.Criptografar(IDT_TIQ)));
                ((DropDownList)e.Row.Cells[gridView.Columns.Count - 1].Controls[1]).Attributes.Add("chave_cat", Server.UrlEncode(Criptografia.Criptografar(IDT_CAT)));
                //SEGURANÇA
                ((ImageButton)e.Row.Cells[gridView.Columns.Count - 5].Controls[1]).Enabled = PermissaoManut.Equals(Constantes.PERM_MANUTENCAO) && _liberar_ordenacao;
                ((ImageButton)e.Row.Cells[gridView.Columns.Count - 5].Controls[3]).Enabled = PermissaoManut.Equals(Constantes.PERM_MANUTENCAO) && _liberar_ordenacao;
                ((HyperLink)e.Row.Cells[gridView.Columns.Count - 4].Controls[1]).Enabled = !PermissaoManut.Equals(Constantes.PERM_NEGADA);
                ((HyperLink)e.Row.Cells[gridView.Columns.Count - 3].Controls[1]).Enabled = PermissaoManut.Equals(Constantes.PERM_MANUTENCAO);
                ((HyperLink)e.Row.Cells[gridView.Columns.Count - 2].Controls[1]).Enabled = PermissaoManut.Equals(Constantes.PERM_MANUTENCAO);
            }
        }

        protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (((DropDownList)sender).SelectedIndex == 1)
            {
                string chave_tiq = ((DropDownList)sender).Attributes["chave_tiq"];
                string chave_cat = ((DropDownList)sender).Attributes["chave_cat"];
                Response.Redirect("Questoes.aspx?idt_tiq=" + chave_tiq + "&idt_cat=" + chave_cat);
            }
        }

        protected void gridView_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName.Equals("ordem"))
            {
                string[] parametros = e.CommandArgument.ToString().Split(';');
                if (parametros.Length == 3)
                {

                    string _idt_tiq = parametros[0];// Server.UrlDecode(Criptografia.Descriptografar(Request["idt_tiq"]));
                    string _idt_cat = parametros[1];//Server.UrlDecode(Criptografia.Descriptografar(Request["idt_cat"]));
                    string _acao = parametros[2];//Request["acao"];
                    CCategoriasQuestionarios categ = new CCategoriasQuestionarios();
                    categ.AlterarOrdemCategoria(_idt_tiq, _idt_cat, _acao, UsuAut.Login);
                    Pesquisar();
                    //Response.Redirect("Questoes.aspx?idt_tiq=" + Server.UrlEncode(Criptografia.Criptografar(_idt_tiq)) + "&idt_cat=" + Server.UrlEncode(Criptografia.Criptografar(_idt_cat)));
                }
            }
        }

        protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
        {
            criteriosPesquisa.MestreTipoQuest = "";
            Session[Page.ToString()] = criteriosPesquisa;
            Response.Redirect("~/CategoriasQuestionarios.aspx");
        }
    }
}

